import { createStore, applyMiddleware } from 'redux'
// 引入汇总所有的reducer
import reducer from '../store/reducers'
//引入redux-thunk，thunk用于支持异步action,ThunkAction用于redux-thunk
import thunk, { ThunkAction } from 'redux-thunk'
//引入redux-devtools-extension,用于redux调试工具
import { composeWithDevTools } from 'redux-devtools-extension'
// 引入action联合类型
import { allAction } from './types'

const store = createStore(reducer, composeWithDevTools(applyMiddleware(thunk)))

// 使用useSelector
export type RootState = ReturnType<typeof store.getState>

// ThunkAction的类型
// 在store中定义复用的RootThunkAction
export type RootThunkAction = ThunkAction<
  void, //约束函数内部的函数的返回值
  RootState, // 约束函数内部的函数的第二个参数的返回值
  unknown, //函数内部的函数的额外参数
  allAction // 约束函数内部的函数的dispatch的action类型
>

export default store
